// DrawLine.cpp: implementation of the CDrawLine class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Vincent.h"
#include "DrawLine.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CDrawLine::CDrawLine()
{

}

CDrawLine::~CDrawLine()
{

}

void CDrawLine::Draw(CDC *pDC)
{
	// 펜을 새로 만든다.
	CPen pPen(PS_SOLID, m_nPenWidth, m_rgbForeground);
	CPen* pOldPen = pDC->SelectObject(&pPen);
	
	// 마지막에 저장된 선의 좌표로 그려준다.
	pDC->MoveTo(m_ptStart);
	pDC->LineTo(m_ptEnd);
	
	// 펜을 복구한다.
	pDC->SelectObject(pOldPen);
}

void CDrawLine::OnLButtonDown(CDC *pDC, UINT nFlags, CPoint point, CPoint scrolled)
{
	// 시작점과 끝점을 누른 곳의 위치로 한다.
	m_ptStart = m_ptEnd = point;
}

void CDrawLine::OnLButtonUp(CDC *pDC, UINT nFlags, CPoint point, CPoint scrolled)
{
	Draw(pDC);			// 설정된 선을 그린다.
	
	m_ptStart += scrolled;	// 스크롤바만큼 더해준다.
	m_ptEnd += scrolled;
	
	// 혹시, 그려질 수 없는 상황이면, 완료가 아님!
	if (m_ptStart == m_ptEnd)
		return;
	
	m_bComplete = true;	// 완료상태로 설정.
}

void CDrawLine::OnMouseMove(CDC *pDC, UINT nFlags, CPoint point, CPoint scrolled)
{
	if (nFlags & MK_LBUTTON)
	{
		// 래스터 오퍼레이션을 R2_NOTXORPEN으로 설정
		pDC->SetROP2(R2_NOTXORPEN);
		
		// 펜을 새로 만든다.
		CPen pPen(PS_SOLID, m_nPenWidth, m_rgbForeground);
		CPen* pOldPen = pDC->SelectObject(&pPen);
		
		// 전에 그려진 선을 지운다.
		pDC->MoveTo(m_ptStart);
		pDC->LineTo(m_ptEnd);
		
		// 마지막 점을 바꾸고,
		m_ptEnd = point;
		
		// 선을 새로 그린다.
		pDC->MoveTo(m_ptStart);
		pDC->LineTo(m_ptEnd);
		
		// 펜을 복구한다.
		pDC->SelectObject(pOldPen);
	}
}
